博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网上图书商城项目学习笔记-007登录功能实现
阅读量:4502 次
发布时间:2019-06-08

本文共 9043 字,大约阅读时间需要 30 分钟。

一、功能流程分析

二、代码

1.view层

1)login.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 3  4  5  6  7    8      9     登录10     11     
12
13
14
15
16
17
20
21 22 23 24 30 31 32 33
34
35
36
37
38
39
40
会员登录41
42 43 44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
76
77
78
79
80
81
82
83
86
87
用户名
 
密 码
 
验证码 72 73 74 换张图75
 
  84 85
88
89
90
91
92
93
94 95 96

 

2)login.js

1 $(function() {  2     /*  3      * 1. 让登录按钮在得到和失去焦点时切换图片  4      */  5     $("#submit").hover(  6         function() {  7             $("#submit").attr("src", "/goods/images/login2.jpg");  8         },  9         function() { 10             $("#submit").attr("src", "/goods/images/login1.jpg"); 11         } 12     ); 13      14     /* 15      * 2. 给注册按钮添加submit()事件,完成表单校验 16      */ 17     $("#loginForm").submit(function(){ 18         $("#msg").text(""); 19         var bool = true; 20         $(".input").each(function() { 21             var inputName = $(this).attr("name"); 22             if(!invokeValidateFunction(inputName)) { 23                 bool = false; 24             } 25         }); 26         return bool; 27     }); 28      29     /* 30      * 3. 输入框得到焦点时隐藏错误信息 31      */ 32     $(".input").focus(function() { 33         var inputName = $(this).attr("name"); 34         $("#" + inputName + "Error").css("display", "none"); 35     }); 36      37     /* 38      * 4. 输入框推动焦点时进行校验 39      */ 40     $(".input").blur(function() { 41         var inputName = $(this).attr("name"); 42         invokeValidateFunction(inputName); 43     }) 44 }); 45  46 /* 47  * 输入input名称,调用对应的validate方法。 48  * 例如input名称为:loginname,那么调用validateLoginname()方法。 49  */ 50 function invokeValidateFunction(inputName) { 51     inputName = inputName.substring(0, 1).toUpperCase() + inputName.substring(1); 52     var functionName = "validate" + inputName; 53     return eval(functionName + "()");     54 } 55  56 /* 57  * 校验登录名 58  */ 59 function validateLoginname() { 60     var bool = true; 61     $("#loginnameError").css("display", "none"); 62     var value = $("#loginname").val(); 63     if(!value) {
// 非空校验 64 $("#loginnameError").css("display", ""); 65 $("#loginnameError").text("用户名不能为空!"); 66 bool = false; 67 } else if(value.length < 3 || value.length > 20) {
//长度校验 68 $("#loginnameError").css("display", ""); 69 $("#loginnameError").text("用户名长度必须在3 ~ 20之间!"); 70 bool = false; 71 } 72 return bool; 73 } 74 75 /* 76 * 校验密码 77 */ 78 function validateLoginpass() { 79 var bool = true; 80 $("#loginpassError").css("display", "none"); 81 var value = $("#loginpass").val(); 82 if(!value) {
// 非空校验 83 $("#loginpassError").css("display", ""); 84 $("#loginpassError").text("密码不能为空!"); 85 bool = false; 86 } else if(value.length < 3 || value.length > 20) {
//长度校验 87 $("#loginpassError").css("display", ""); 88 $("#loginpassError").text("密码长度必须在3 ~ 20之间!"); 89 bool = false; 90 } 91 return bool; 92 } 93 94 /* 95 * 校验验证码 96 */ 97 function validateVerifyCode() { 98 var bool = true; 99 $("#verifyCodeError").css("display", "none");100 var value = $("#verifyCode").val();101 if(!value) {
//非空校验102 $("#verifyCodeError").css("display", "");103 $("#verifyCodeError").text("验证码不能为空!");104 bool = false;105 } else if(value.length != 4) {
//长度不为4就是错误的106 $("#verifyCodeError").css("display", "");107 $("#verifyCodeError").text("错误的验证码!");108 bool = false;109 } else {
//验证码是否正确110 $.ajax({111 cache: false,112 async: false,113 type: "POST",114 dataType: "json",115 data: {method: "validateVerifyCode", verifyCode: value},116 url: "/goods/UserServlet",117 success: function(flag) {118 if(!flag) {119 $("#verifyCodeError").css("display", "");120 $("#verifyCodeError").text("错误的验证码!");121 bool = false; 122 }123 }124 });125 }126 return bool;127 }

 

2.servlet层

1)UserServlet.java

1 public String login(HttpServletRequest request, HttpServletResponse response) throws IOException { 2         /* 3          * 1. 封装表单数据到User 4          * 2. 校验表单数据 5          * 3. 使用service查询,得到User 6          * 4. 查看用户是否存在,如果不存在: 7          *   * 保存错误信息:用户名或密码错误 8          *   * 保存用户数据:为了回显 9          *   * 转发到login.jsp10          * 5. 如果存在,查看状态,如果状态为false:11          *   * 保存错误信息:您没有激活12          *   * 保存表单数据:为了回显13          *   * 转发到login.jsp14          * 6. 登录成功:15          *   * 保存当前查询出的user到session中16          *   * 保存当前用户的名称到cookie中,注意中文需要编码处理。17          */18         19         // 1. 封装表单数据到user20         User formUser = CommonUtils.toBean(request.getParameterMap(), User.class);21         22         // 2. 校验23         Map
errors = validateLogin(formUser, request.getSession());24 if(errors.size() > 0) {25 request.setAttribute("errors", errors);26 request.setAttribute("user", formUser);27 return "f:/jsps/user/login.jsp";28 }29 30 // 3. 调用userService#login()方法31 User user = userService.login(formUser);32 33 // 4. 开始判断34 if(user == null) {35 request.setAttribute("msg", "用户名或密码错误!");36 request.setAttribute("user", formUser);37 return "f:/jsps/user/login.jsp";38 }39 if(!user.isStatus()) {40 request.setAttribute("msg", "您还没有激活!");41 request.setAttribute("user", formUser);42 return "f:/jsps/user/login.jsp"; 43 }44 // 保存用户到session45 request.getSession().setAttribute("sessionUser", user);46 // 获取用户名保存到cookie中47 String loginname = URLEncoder.encode(user.getLoginname(), "utf-8");48 Cookie cookie = new Cookie("loginname", loginname);49 cookie.setMaxAge(24 * 60 * 60 * 10);//保存10天50 response.addCookie(cookie);51 return "r:/index.jsp";52 }53 54 /**55 * 登录校验方法,内容待完成56 * @param formUser57 * @param session58 * @return59 */60 private Map
validateLogin(User formUser, HttpSession session) {61 Map
errors = new HashMap
();62 // 1. 校验登录名63 String loginname = formUser.getLoginname();64 if(loginname == null || loginname.trim().isEmpty()) {65 errors.put("loginname", "用户名不能为空!");66 } else if(loginname.length() < 3 || loginname.length() > 20) {67 errors.put("loginname", "用户名长度必须在3~20之间!");68 } 69 70 // 2. 校验登录密码71 String loginpass = formUser.getLoginpass();72 if(loginpass == null || loginpass.trim().isEmpty()) 73 errors.put("loginpass", "密码不能为空!");74 else if(loginpass.length() < 3 || loginpass.length() > 20)75 errors.put("loginpass", "密码长度必须在3~20之间!");76 77 // 3. 验证码校验78 String verifyCode = formUser.getVerifyCode();79 String vCode = (String) session.getAttribute("vCode");80 if(verifyCode == null || verifyCode.trim().isEmpty()) {81 errors.put("verifyCode", "验证码不能为空!");82 } else if(!verifyCode.equalsIgnoreCase(vCode)) {83 errors.put("verifyCode", "验证码错误!");84 }85 86 return errors;87 }

 

3.service层

1)userService.java

1     /** 2      * 登录功能 3      * @param user 4      * @return 5      */ 6     public User login(User user) { 7         try { 8             return userDao.findByLoginnameAndLoginpass(user.getLoginname(), user.getLoginpass()); 9         } catch (SQLException e) {10             throw new RuntimeException(e);11         }12     }

 

4.dao层

1)UserDao.java

1     /** 2      * 按用户名和密码查询 3      * @param loginname 4      * @param loginpass 5      * @return 6      * @throws SQLException 7      */ 8     public User findByLoginnameAndLoginpass(String loginname, String loginpass) throws SQLException { 9         String sql = "select * from t_user where loginname=? and loginpass=?";10         return qr.query(sql, new BeanHandler
(User.class), loginname, loginpass);11 }

 

转载于:https://www.cnblogs.com/shamgod/p/5159750.html

你可能感兴趣的文章
c++11——可变参数模板
查看>>
from imp import * 重新加载导入的模块reload
查看>>
二叉树三种遍历调试运行版
查看>>
关于PHP、python使用的CRC32函数
查看>>
JS自动关闭授权弹窗,并刷新父页面
查看>>
c#语言几种常见循环代码
查看>>
SQL多表连接查询(详细实例)
查看>>
Http中涉及到的知识点总结
查看>>
adb命令记录
查看>>
swift初学日志
查看>>
Eclipse上GIT插件_客户端配置
查看>>
JavaScript浏览器对象之二Document对象
查看>>
js 乘除算法 浮点 精度解决办法
查看>>
sqlserver2005版本的mdf文件,还没有log文件,
查看>>
错误“该伙伴事务管理器已经禁止了它对远程/网络事务的支持”解决方案
查看>>
System x 服务器制作ServerGuide U盘安装Windows Server 2008 操作系统 --不格式化盘
查看>>
前端常见跨域解决方案(全)
查看>>
umi---className设置多个样式
查看>>
网页包抓取工具Fiddler工具简单设置
查看>>
周总结报告
查看>>